package com.ums.scumspay.bigdataimport.Util;
import java.math.BigDecimal;

/**
 * 类名 DoubleUtil
 * 作者 LYC
 * 时间 2021.12.09 2021/12/9 14:35
 * 描述：浮点运算精度处理工具类
 */
public class DoubleUtil {

    /**
     * 作者 LYC
     * 时间 2022/8/4 10:52
     * 参数 [value, scale, roundingMode]
    * 返回值 double
     *方法描述：保留两位小数，并且根据roundingMode判断做舍入
    **/
    public static double round(double value, int scale, int roundingMode) {
        BigDecimal bd = new BigDecimal(value);
        bd = bd.setScale(scale, roundingMode);
        double d = bd.doubleValue();
        bd = null;
        return d;
    }

    /**
     * 作者 LYC
     * 时间 2022/8/4 10:54
     * 参数 [value, scale]
    * 返回值 double 
     *方法描述：保留两位小数 不做舍入
    **/
    public static double round(double value,int scale){
        BigDecimal bd = new BigDecimal(value);
        bd = bd.setScale(scale, BigDecimal.ROUND_DOWN);
        double d = bd.doubleValue();
        bd = null;
        return d;
    }

    /**
     * 作者 LYC
     * 时间  20:59
     * 参数 [value, scale]
    * 返回值 double 
     *方法描述：四舍五入，Round_Up 模式
    **/
    public static double round_toUp(double value,int scale){
        BigDecimal bd=new BigDecimal(value);
        bd=bd.setScale(scale,BigDecimal.ROUND_CEILING);
        double d=bd.doubleValue();
        bd=null;
        return d;
    }

    /**
     * 作者 LYC
     * 时间 2022/10/8 10:51
     * 参数 [value, scale]
    * 返回值 java.lang.String
     *方法描述：format 方式计算四舍五入
    **/
    public static String round_toformat(double value,int scale){
        String _str="%."+String.valueOf(scale)+"f";
        String result=String.format(_str,value);
        return  result;
    }

    /**
     * 作者 LYC
     * 时间 2021/12/9 14:38
     * 参数 [d1, d2]
    * 返回值 double 
     *方法描述：相加
    **/
    public static double sum(double d1,double d2){
        BigDecimal bd1 = new BigDecimal(Double.toString(d1));
        BigDecimal bd2 = new BigDecimal(Double.toString(d2));
        return bd1.add(bd2).doubleValue();
    }
    /**
     * 作者 LYC
     * 时间 2021/12/9 14:38
     * 参数 [d1, d2]
    * 返回值 double 
     *方法描述：相减
    **/
    public static double sub(double d1,double d2){
        BigDecimal bd1 = new BigDecimal(Double.toString(d1));
        BigDecimal bd2 = new BigDecimal(Double.toString(d2));
        return bd1.subtract(bd2).doubleValue();
    }
    /**
     * 作者 LYC
     * 时间 2021/12/9 14:38
     * 参数 [d1, d2]
    * 返回值 double 
     *方法描述：乘法
    **/
    public static double mul(double d1,double d2){
        BigDecimal bd1 = new BigDecimal(Double.toString(d1));
        BigDecimal bd2 = new BigDecimal(Double.toString(d2));
        return bd1.multiply(bd2).doubleValue();
    }
    /**
     * 作者 LYC
     * 时间 2021/12/9 14:38
     * 参数 [d1, d2, scale]  scale 四舍五入 小数点位数
    * 返回值 double 
     *方法描述：除法
    **/
    public static double div(double d1,double d2,int scale){
        BigDecimal bd1 = new BigDecimal(Double.toString(d1));
        BigDecimal bd2 = new BigDecimal(Double.toString(d2));
        return bd1.divide
                (bd2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
    }
}
